function Watcher(vm, exp, cb){
    this.cb = cb;
    this.vm = vm;
    this.exp = exp;
    // 每次调用都会将自身添加到 订阅队列中
    this.value = this.get();
}

Watcher.prototype = {
    get: function(){
        Dep.target = this;
        // 通过get函数将 Dep.target 添加到订阅队列中
        var value = this.vm.data[this.exp];
        Dep.target = null;
        return value;
    },
    update: function(){
        this.run();
    },
    run: function(){
        var value = this.vm.data[this.exp];
        var oldVal = this.value;
        if(value != oldVal){
            this.value = value;
            this.cb.call(this.vm, value, oldVal);
        }
    }
}